package com.bw.controller;

import cn.hutool.core.util.StrUtil;
import com.bw.commpn.JwtUtils;
import com.bw.commpn.Md5Utils;
import com.bw.entity.User;
import com.bw.mapper.UserMapper;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.stereotype.Controller;
import org.springframework.ui.Model;
import org.springframework.validation.BindingResult;
import org.springframework.web.bind.annotation.RequestMapping;

import javax.servlet.http.Cookie;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import javax.servlet.http.HttpSession;
import javax.validation.Valid;
import java.util.List;

@Controller
public class LoginController {

    @Autowired  // 从容器中 找对象
    UserMapper userMapper;


    /**
     * 返回登录页面
     * @return
     */
    @RequestMapping("/loginPage.do")
    public String loginPage(){

        return "login";

    }

    /**
     *
     * 执行登录
     * jsr303 验证
     * @return
     */
    @RequestMapping("/login.do")
    public String login(@Valid  User user, BindingResult result, Model model, HttpServletRequest request, HttpServletResponse response){
        // 非空验证
        if (result.hasErrors()) {  // 如果校验结果有异常
            String defaultMessage = result.getAllErrors().get(0).getDefaultMessage();  // 获取其中一个异常

            model.addAttribute("error",defaultMessage);

            return "login";
        }

        // 用户名是否存在
        User userDB = userMapper.selectByName(user.getName());

        if (userDB == null){
            model.addAttribute("error","用户名不存在");
            return "login";

        }
        // 密码是否正确

        String password = userDB.getPassword(); //数据库里的乱码  beb6b72231daafe7d913baa818a63f0c
        String salt = userDB.getSalt();  //数据库里的盐  qwer

        String loginPassword = user.getPassword(); //用户输入的密码

        // 加密用户输入的密码 和数据库里的盐
        String md5String = Md5Utils.getMD5String(loginPassword + salt);
        // 判断加密之后的乱码是否相等  如果乱码相等   密码也相等
        if (!md5String.equals(password)){

            model.addAttribute("error","密码错误");
            return "login";
        }
//
//        HttpSession session = request.getSession();
//        // session  把数据放 当前计算机的内存里
//        session.setAttribute("user",userDB);

        // 加密用户信息 得到令牌
        String token = JwtUtils.createToken(userDB);
        // 服务器创建一个cookie    key-value结构的  存放令牌
        Cookie cookie = new Cookie("token", token);
        //服务器把cookie返回给浏览器
        response.addCookie(cookie);

        model.addAttribute("name",user.getName());

        return "redirect:list.do";  // 重定向(根据浏览器配合使用): 网址路径     告诉浏览器去访问这个网址 list.do

    }




    @RequestMapping("/list.do")
    public String list(Model model){

       List<User> list =  userMapper.selectUserList();
        model.addAttribute("list",list);
        return "list";
    }


}
